package com.nb.controller.nurse;

import com.nb.dto.nurse.AssistTreatmentDTO;
import com.nb.dto.nurse.NurseInfoDTO;
import com.nb.result.Result;
import com.nb.service.NurseService;
import com.nb.vo.nurse.AllPatientInfoVO;
import com.nb.vo.nurse.NeedHelpVO;
import com.nb.vo.nurse.NurseInfoVO;
import com.nb.vo.patient.OrderVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 护士相关接口
 */
@Slf4j
@Api(tags = "护士相关接口")
@RestController
@RequestMapping("/api/nurse")
public class NurseController {

    @Autowired
    private NurseService nurseService;

    /**
     * 获取所有患者信息
     *
     * @return 所有患者信息列表
     */
    @GetMapping("/getAllPatientInfo")
    @ApiOperation("获取所有患者信息")
    public Result<List<AllPatientInfoVO>> getAllPatientInfo() {
        List<AllPatientInfoVO> allPatientInfo = nurseService.getAllPatientInfo();
        return Result.success(allPatientInfo);
    }

    /**
     * 获取需要协助诊疗的患者信息
     *
     * @return 需要协助诊疗的患者信息列表
     */
    @GetMapping("/getNeedHelp")
    @ApiOperation("获取需要协助诊疗的患者列表")
    public Result<List<NeedHelpVO>> getNeedHelp() {
        List<NeedHelpVO> needHelpList = nurseService.getNeedHelpList();
        return Result.success(needHelpList);
    }

    /**
     * 护士协助诊疗 - 记录生命体征
     * @param dto 包含患者ID和生命体征数据
     * @return 操作结果
     */
    @PatchMapping("/helpTreat")
    @ApiOperation("护士协助诊疗 - 记录生命体征")
    public Result<String> assistTreatment(@RequestBody AssistTreatmentDTO dto) {
        log.info("护士记录生命体征: {}", dto);
        nurseService.assistTreatment(dto);
        return Result.success("生命体征记录成功");
    }

    /**
     * 获取护士基本信息
     *
     * @return 护士基本信息
     */
    @GetMapping("/getInfo")
    @ApiOperation("获取护士基本信息")
    public Result<NurseInfoVO> getNurseInfo() {
        log.info("获取护士基本信息");
        NurseInfoVO nurseInfo = nurseService.getNurseInfo();
        return Result.success(nurseInfo);
    }

    /**
     * 修改护士基本信息
     *
     * @param nurseInfoDTO 护士信息数据传输对象
     * @return 修改结果
     */
    @PatchMapping("/modifyInfo")
    @ApiOperation("修改护士基本信息")
    public Result<NurseInfoVO> modifyNurseInfo(@RequestBody NurseInfoDTO nurseInfoDTO) {
        log.info("修改护士基本信息");
        nurseService.updateNurseInfo(nurseInfoDTO);
        return Result.success();
    }

    /**
     * 帮患者支付订单
     *
     * @param id 订单ID
     * @return 支付结果
     */
    @PatchMapping("/pay")
    @ApiOperation("护士帮患者支付订单")
    public Result<String> pay(String id) {
        nurseService.pay(id);
        return Result.success("支付成功");
    }

    /**
     * 获取所有患者的未缴费订单
     *
     * @return 订单列表
     */
    @GetMapping("getPaymentUser")
    @ApiOperation("获取所有患者的未缴费订单")
    public Result<List<OrderVO>> getAllPatientOrders() {
        List<OrderVO> ordersList = nurseService.getAllOrders();
        return Result.success(ordersList);
    }

    /**
     * 更换护士头像
     *
     * @param file 头像文件
     * @return 更换结果，包含新头像的完整 URL
     */
    @PutMapping("/changeAvatar")
    @ApiOperation("更换护士头像")
    public Result<String> changeAvatar(@RequestParam("file") MultipartFile file) {
        log.info("更换护士头像");
        if (file.isEmpty()) {
            return Result.error("上传文件不能为空");
        }
        // nurseService.changeAvatar(file) 返回的是完整的 URL
        String avatarPath = nurseService.changeAvatar(file);
        // 将完整的 URL 作为数据返回给前端
        return Result.success("头像更换成功", avatarPath);
    }
}

